package com.security.core.validate.code;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.security.core.properties.SecurityConstants;

/**
 * @title ValidateCodeProcessorHolder
 * @version 1.0.0
 * @description 系统中的校验码处理器
 * @author Dark_blue
 * @date 2019年8月27日
 */
@Component
public class ValidateCodeProcessorHolder {

	/**
	 * @description 
	 */
	@Autowired
	private Map<String, ValidateCodeProcessor> validateCodeProcessors;
	
	/**
	 * @title findValidateCodeProcessor
	 * @description 根据传入的验证类型去找到对应的验证码处理器
	 * @author Dark_blue
	 * @date 2019年8月27日
	 * @param validateCodeType
	 * @return
	 */
	public ValidateCodeProcessor findValidateCodeProcessor(ValidateCodeType validateCodeType) {
		return findValidateCodeProcessor(validateCodeType.toString().toLowerCase());
	}
	
	/**
	 * @title findValidateCodeProcessor
	 * @description 根据传入的验证类型去找到对应的验证码处理器
	 * @author Dark_blue
	 * @date 2019年8月27日
	 * @param validateCodeType
	 * @return
	 */
	public ValidateCodeProcessor findValidateCodeProcessor(String validateCodeType) {
		String name = validateCodeType.toLowerCase() + SecurityConstants.DEFAULT_CODE_RPOCESSOR_NAME_SUFFIX;
		ValidateCodeProcessor processor = validateCodeProcessors.get(name);
		if (processor == null) {
			throw new ValidateCodeException("验证码处理器" + name + "不存在");
		}
		return processor;
	}
}
